在 Canvas 中有如下几个 save 系列函数:
可以看到,flag 参数在诸多函数中都有使用,这里我们先关注 save 的两个构造函数和 saveLayer 的两个构造函数。我们知道,二者的不同之处在于,saveLayer() 函数会新建一块画布,而 save() 函数则不会新建画布。它们都具有 Flag(标识),这些 Flag(标识)的含义和适用范围如下表所示。
Flag | 含义 | 适用范围 |
---|---|---|
ALL_SAVE_FLAG | 保存所有的标识 | save()、saveLayer() |
MATRIX_SAVE_FLAG | 仅保存 Canvas 的 matrix 数组 | save()、saveLayer() |
CLIP_SAVE_FLAG | 仅保存 Canvas 的当前大小 | save()、saveLayer() |
HAS_ALPHA_LAYER_SAVE_FLAG | 标识新建的 bmp 具有透明度,在与上层画布结合时,透明位置显示上图图像,与 FULL_COLOR_LAYER_SAVE_FLAG 冲突,若同时指定,则以 HAS_ALPHA_LAYER_SAVE_FLAG 为主 | saveLayer() |
FULL_COLOR_LAYER_SAVE_FLAG | 标识新建的 bmp 颜色完全独立,在与上层画布结合时,先清空上层画布再覆盖上去 | saveLayer() |
CLIP_TO_LAYER_SAVE_FLAG | 在保存图层前先把当前画布根据 bounds 裁剪,与 CLIP_SAVE_FLAG 冲突,若同时指定,则以 CLIP_SAVE_FLAG为主 | saveLayer() |
从上面的表格中可以看到,ALL_SAVE_FLAG、MATRIX_SAVE_FLAG、CLIP_SAVE_FLAG 是 save()、saveLayer() 函数共用的。而另外三个 Flag 是 saveLayer() 函数专用的。
我们逐个解析下它们的不同之处。在讲解之前,先考虑一下:如果让我们保存一块画布的状态,以便恢复,则需要保存哪些内容呢?
第一个是位置信息,第二个是大小信息,好像除此之外也没什么了。位置信息对应的是 MATRIX_SAVE_FLAG,大小信息对应的是 CLIP_SAVE_FLAG,这是 save() 和 saveLayer() 函数所共用的标识。而 saveLayer() 函数专用的三个标识用于指定 saveLayer() 函数新建的画布具有哪种特性,而不是保存画布的范畴。